import axios from 'axios'
import { getToken } from '@/composables/auth'
import { toast } from '@/composables/util'
import { useUserStore } from '@/store'
import { API_BASE_URL, TOKEN_HEADER_NAME } from '@/config/settings'

// 创建 axios 实例
const service = axios.create({
  // baseURL: '/api',
  baseURL: API_BASE_URL,
  // baseURL: import.meta.env.VITE_APP_BASE_API,
  timeout: 5000,
})

// 请求拦截
service.interceptors.request.use(config => {
  // 获取 token
  const token = getToken()
  // 判断是否有 token 有则将token添加至请求头中
  if (token) config.headers[TOKEN_HEADER_NAME] = token
  // 返回请求配置
  return config
}, err => {
  return Promise.reject(err)
})

// 响应拦截
service.interceptors.response.use(
  res => {
    return res.request.responseType === 'blob' ? res.data : res.data.data
  },
  err => {
    let msg = err.response.data.msg || "请求失败"
    const useStore = useUserStore()
    if (msg.includes('Vue3实战商城后台管理系统')) {
      msg = '此为演示模板，仅供演示，禁止操作'
    }
    if (msg == "非法token，请先登录！") {
      window.location.reload()
      useStore.userLogout()
    }
    toast(msg, 'error')
    // 将错误继续向下传递
    return Promise.reject(err)
  }
)

export default service
